package com.dji.sample.wayline.service;

import com.dji.sample.wayline.model.entity.DockApron;
import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.PaginationData;

import java.util.List;
import java.util.Optional;

/**
 * 机场停机坪服务接口
 * 定义了对机场停机坪信息进行增删改查操作的方法
 *
 * @author sean
 * @version 1.0
 * @date 2024/1/1
 */
public interface IDockApronService {

    /**
     * 创建机场停机坪信息
     * @param dockApron 机场停机坪信息
     * @return 创建结果
     */
    HttpResultResponse<DockApron> createDockApron(DockApron dockApron);

    /**
     * 根据ID删除机场停机坪信息
     * @param id 停机坪ID
     * @return 删除结果
     */
    HttpResultResponse<Boolean> deleteDockApronById(Long id);

    /**
     * 根据停机坪编号删除机场停机坪信息
     * @param apronNo 停机坪编号
     * @return 删除结果
     */
    HttpResultResponse<Boolean> deleteDockApronByApronNo(String apronNo);

    /**
     * 批量删除机场停机坪信息
     * @param apronNos 停机坪编号列表
     * @return 删除结果
     */
    HttpResultResponse<Boolean> deleteDockAprons(List<String> apronNos);

    /**
     * 更新机场停机坪信息
     * @param dockApron 机场停机坪信息
     * @return 更新结果
     */
    HttpResultResponse<Boolean> updateDockApron(DockApron dockApron);

    /**
     * 根据ID查询机场停机坪信息
     * @param id 停机坪ID
     * @return 机场停机坪信息
     */
    Optional<DockApron> getDockApronById(Long id);

    /**
     * 根据停机坪编号查询机场停机坪信息
     * @param apronNo 停机坪编号
     * @return 机场停机坪信息
     */
    Optional<DockApron> getDockApronByApronNo(String apronNo);

    /**
     * 根据停机坪名称查询机场停机坪信息
     * @param apronName 停机坪名称
     * @return 机场停机坪信息
     */
    Optional<DockApron> getDockApronByApronName(String apronName);

    /**
     * 分页查询机场停机坪信息
     * @param page 页码
     * @param pageSize 每页大小
     * @param status 停机坪状态（可选）
     * @return 分页结果
     */
    PaginationData<DockApron> getDockAprons(long page, long pageSize, Integer status);

    /**
     * 查询所有机场停机坪信息
     * @return 机场停机坪列表
     */
    List<DockApron> getAllDockAprons();

    /**
     * 根据状态查询机场停机坪信息
     * @param status 停机坪状态
     * @return 机场停机坪列表
     */
    List<DockApron> getDockApronsByStatus(Integer status);

    /**
     * 根据地理位置范围查询机场停机坪信息
     * @param minLongitude 最小经度
     * @param maxLongitude 最大经度
     * @param minLatitude 最小纬度
     * @param maxLatitude 最大纬度
     * @return 机场停机坪列表
     */
    List<DockApron> getDockApronsByLocation(Double minLongitude, Double maxLongitude, 
                                           Double minLatitude, Double maxLatitude);

    /**
     * 根据高度范围查询机场停机坪信息
     * @param minAltitude 最小高度
     * @param maxAltitude 最大高度
     * @return 机场停机坪列表
     */
    List<DockApron> getDockApronsByAltitude(Double minAltitude, Double maxAltitude);
}